<?php
include_once BXD_INCLUDEPATH . 'lib/gd/GD.php';

/**
 * Classe che si occupa di ridimensionare un'immagine impostando alcuni parametri
 * quali URL, MAX_X, MAX_Y etc..
 *
 * @author Damiano Ciarla
 * @version 1.0
 * @category lib/gd
 */
class Resize extends GD
{
	function controlladati()
	{
		ErrorManager::getInstance()->setReferer("GD_Lib");

		if($this->urlimage=="")
			ErrorManager::getInstance()->addError("Scegliere un file da ridimensionare");
		elseif(!file_exists($this->urlimage) || !is_file($this->urlimage))
			ErrorManager::getInstance()->addError("Il file selezionato non esiste");

		if(!is_numeric($this->maxX) || !is_numeric($this->maxY) || $this->maxX<0 || $this->maxY<0)
			ErrorManager::getInstance()->addError("L'altezza e la larghezza dell'immagine devono essere numerici");

		if(!file_exists($this->folder) || !chmod($this->folder,0777))
			ErrorManager::getInstance()->addError("La cartella di destinazione non esiste o non è scrivibile");

		if($this->fisso!=0 && $this->fisso!=1)
			ErrorManager::getInstance()->addError("La variabile di dimensione fissa deve essere 0 o 1");

		if($this->latofisso!="XY" && $this->latofisso!="X" && $this->latofisso!="Y")
			ErrorManager::getInstance()->addError("La variabile di lato fisso devono essere X o Y o XY");

		if(count(ErrorManager::getInstance()->countErrorList("GD_Lib")) > 0) return FALSE;

		return TRUE;
	}

	function go()
	{
		if($this->controlladati())
		{
			$filename = basename($this->urlimage);
			$this->originalName = $filename;

			if($this->newName=="")
				$this->newName=$filename;

			$this->Estensione = strtolower(substr($filename, strrpos($filename, "."), strlen($filename)-strrpos($filename, ".")));

			if($this->Estensione==".jpeg" || $this->Estensione==".jpg")
				$handle_immagine = imagecreatefromjpeg($this->urlimage);
			elseif($this->Estensione==".gif")
				$handle_immagine = imagecreatefromgif($this->urlimage);
			elseif($this->Estensione==".png")
				$handle_immagine = imagecreatefrompng($this->urlimage);
			else
			{
				array_push($this->errore,"Formato immagine non valido");
				return null;
			}

			$handle_immagine_adattata=$this->adatta($handle_immagine);
			
			imagejpeg($handle_immagine_adattata, $this->folder.$this->newName, 80);
			chmod($this->folder.$this->newName,0777);

			unset($handle_immagine);
			unset($handle_immagine_adattata);
		}
	}

	function adatta($handle_immagine)
	{
		$this->originalX=imagesx($handle_immagine);
		$this->originalY=imagesy($handle_immagine);

		if($this->fisso==1)
		{
			$this->newX=$this->maxX;
			$this->newY=$this->maxY;
		}
		else
		{
			if($this->latofisso=="XY")
			{
				if ($this->originalX/$this->originalY>$this->maxX/$this->maxY)
				{
					$this->newX=$this->maxX;
					$this->newY=($this->originalY/$this->originalX)*$this->maxX;
				}
				else
				{
					$this->newX=($this->originalX/$this->originalY)*$this->maxY;
					$this->newY=$this->maxY;
				}
			}
			elseif($this->latofisso=="X")
			{
				$this->newX=$this->maxX;
				$this->newY=($this->originalY/$this->originalX)*$this->maxX;
			}
			elseif($this->latofisso=="Y")
			{
				$this->newX=($this->originalX/$this->originalY)*$this->maxY;
				$this->newY=$this->maxY;
			}
			else
			{
				if ($this->originalX/$this->originalY>$this->maxX/$this->maxY)
				{
					$this->newX=$this->maxX;
					$this->newY=($this->originalY/$this->originalX)*$this->maxX;
				}
				else
				{
					$this->newX=($this->originalX/$this->originalY)*$this->maxY;
					$this->newY=$this->maxY;
				}
			}
		}

		$tmp_immagine = imagecreatetruecolor($this->newX, $this->newY);
		$handle_immagine_adattata = imagecopyresampled($tmp_immagine, $handle_immagine, 0, 0, 0, 0, $this->newX, $this->newY, $this->originalX, $this->originalY);

		return $tmp_immagine;
	}
}
?>